home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / nevow / liveglue.js < prev    next >
Text File  |  2006-01-17  |  8KB  |  274 lines

  1.  
  2. var nevow_clientHandleId;       /* This variable must be defined in your HTML.
  3.                                  */
  4.  
  5. var liveevil_unload = false;
  6. var auto_open = true;
  7.  
  8. var last_request = null;
  9. var last_server_message_time = null;
  10.  
  11. var disconnectListeners = [];
  12.  
  13. var inputListeners = [];
  14. var listenerId = 0;
  15.  
  16. var base_url = this.location.toString();
  17. var queryParamIndex = base_url.indexOf('?');
  18. var userAgent = navigator.userAgent.toLowerCase();
  19.  
  20. if (queryParamIndex != -1) {
  21.   base_url = base_url.substring(0, queryParamIndex);
  22.  }
  23.  
  24. if (base_url.charAt(base_url.length-1) != '/') {
  25.   base_url += '/';
  26.  }
  27.  
  28. base_url += 'livepage_client/'
  29.  
  30.  
  31. function createRequest() {
  32.     if (window.XMLHttpRequest) {
  33.       req = new XMLHttpRequest();
  34.     } else {
  35.         req = new ActiveXObject("Microsoft.XMLHTTP")
  36.     }
  37.     reqObj = new Object()
  38.     reqObj.request = req
  39.     return reqObj
  40. }
  41.  
  42. function connect(outputNum) {
  43.   var xmlhttp = createRequest();
  44.   last_request = xmlhttp.request;
  45.   xmlhttp.request.onreadystatechange = function() {
  46.     if (xmlhttp.request.readyState == 4) {
  47.       if (xmlhttp.request.responseText) {
  48.         last_server_message_time = new Date()
  49.         eval(xmlhttp.request.responseText)
  50.         if (!liveevil_unload && auto_open) {
  51.           connect(outputNum + 1)
  52.         }
  53.       } else {
  54.         for (var i=0; i<disconnectListeners.length; i++) {
  55.           disconnectListeners[i]()
  56.           disconnectListeners = []
  57.         }
  58.         last_request = null
  59.       }
  60.     }
  61.   }
  62.   var U = base_url + nevow_clientHandleId + "/output?outputNum=" + outputNum;
  63.   xmlhttp.request.open("GET", U, true);
  64.   xmlhttp.request.send(null);
  65. }
  66.  
  67.  
  68. if (userAgent.indexOf("msie") != -1) {
  69.     /* IE specific stuff */
  70.     /* Abort last request so we don't 'leak' connections */
  71.     window.attachEvent("onbeforeunload", function() { if (last_request != null) {last_request.abort();} } )
  72.     /* Set unload flag */
  73.     window.attachEvent("onbeforeunload", function() { liveevil_unload = true; } )
  74. } else if (document.implementation && document.implementation.createDocument) {
  75.     /* Mozilla specific stuff (onbeforeunload is in v1.7+ only) */
  76.     window.addEventListener("beforeunload", function() { liveevil_unload = true; }, false)
  77. }
  78.  
  79.  
  80. function listener(callWhenAllDone) {
  81.     this.listenerId = listenerId
  82.     listenerId += 1
  83.     this.events = []
  84.     this.callWhenAllDone = callWhenAllDone
  85.     this.fired = false
  86.     this.inputDone = function(what) {
  87.         var found = false
  88.         for (var i=0; i<this.events.length; i++) {
  89.             if (this.events[i] == what) {
  90.                 this.events.splice(i, 1)
  91.                 found = true
  92.                 break
  93.             }
  94.         }
  95.         if (this.events.length == 0) {
  96.             if (this.fired) {
  97.                 alert("Tried to fire twice :(")
  98.             } else {
  99.                 this.callWhenAllDone()
  100.                 this.fired = true
  101.             }
  102.         }
  103.     }
  104. }
  105.  
  106.  
  107. function listenForInputEvents(callWhenAllDone) {
  108.     var newListener = new listener(callWhenAllDone)
  109.     inputListeners.push(newListener)
  110.     return newListener
  111. }
  112.  
  113.  
  114. function stopListening(theListener) {
  115.     for (var i=0; i<inputListeners.length; i++) {
  116.         if (inputListeners[i] == theListener) {
  117.             inputListeners.splice(i, 1)
  118.             break
  119.         }
  120.     }
  121.     if (theListener.events.length == 0) {
  122.         theListener.callWhenAllDone()
  123.     }
  124. }
  125.  
  126. function addDisconnectListener(callback) {
  127.     disconnectListeners.push(callback)
  128.     return callback
  129. }
  130.  
  131. function delDisconnectListener(theListener) {
  132.     for (var i=0; i<disconnectListeners.length; i++) {
  133.     if (disconnectListeners[i] == theListener){
  134.         disconnectListeners.splice(i, 1)
  135.         break
  136.     }
  137.     }
  138. }
  139.  
  140. function nevow_clientToServerEvent(theTarget, evalAfterDone) {
  141.     if (theTarget != 'close' && liveevil_unload) {
  142.         // Server had previously closed the output; let's open it again.
  143.         if (auto_open) {
  144.             liveevil_unload = false }
  145.         connect(0)
  146.     }
  147.     var additionalArguments = ''
  148.     for (i = 2; i<arguments.length; i++) {
  149.         additionalArguments += '&arguments='
  150.         additionalArguments += encodeURIComponent(arguments[i])
  151.     }
  152.     var input = createRequest()
  153.     input.request.onreadystatechange = function() {
  154.         if (input.request.readyState == 4) {
  155.             eval(input.request.responseText)
  156.             if (evalAfterDone) {
  157.                eval(evalAfterDone)
  158.             }
  159.             for (var i=0; i<input.events.length; i++) {
  160.                 input.events[i].inputDone(input.request)
  161.             }
  162.         }
  163.     }
  164.     input.events = []
  165.     for (var i=0; i<inputListeners.length; i++) {
  166.         inputListeners[i].events.push(input.request)
  167.         input.events.push(inputListeners[i])
  168.     }
  169.     input.request.open(
  170.       "GET",
  171.       base_url +
  172.       nevow_clientHandleId +
  173.       "/input?" +
  174.       "handler-path=&handler-name=" +
  175.       encodeURIComponent(theTarget) +
  176.       additionalArguments)
  177.  
  178.     input.request.send(null)
  179. }
  180.  
  181. function nevow_setNode(node, to) {
  182.     document.getElementById(node).innerHTML = to;
  183. }
  184.  
  185. function nevow_appendNode(node, what) {
  186.     var oldnode = document.getElementById(node);
  187.     var newspan = document.createElement('span');
  188.     newspan.innerHTML = what;
  189.     for (i=0; i<newspan.childNodes.length; i++) {
  190.         oldnode.appendChild(newspan.childNodes[i]);
  191.     }
  192. }
  193.  
  194. function nevow_prependNode(node, what) {
  195.   var oldnode = document.getElementById(node);
  196.   var newspan = document.createElement('span');
  197.   newspan.innerHTML = what;
  198.   for (i=newspan.childNodes.length-1; i>=0; i--){
  199.     if (oldnode.childNodes.length == 0)
  200.       oldnode.appendChild(newspan.childNodes[i]);
  201.     else
  202.       oldnode.insertBefore(newspan.childNodes[i], oldnode.childNodes[0]);
  203.   }
  204. }
  205.  
  206. function nevow_insertNode(node, before) {
  207.     var oldnode = document.getElementById('before');
  208.     var newspan = document.createElement('span');
  209.     newspan.innerHTML = what;
  210.     var previous = oldnode;
  211.     for (i=0; i<newspan.childNodes.length; i++) {
  212.         previous.parentNode.insertBefore(newspan.childNodes[i], previous);
  213.         previous = newspan.childNodes[i];
  214.     }
  215. }
  216.  
  217. function nevow_closeLive(evalAfterDone) {
  218.     // Tell connect() not to complain at us when the server closes the
  219.     // connection with no serverToClientEvent
  220.     liveevil_unload = true
  221.     var old_auto_open = auto_open
  222.     auto_open = false
  223.     // Tell the server we know we're done, send us an empty event
  224.     // evalAfterDone will be evalled after the server sends us an empty event
  225.     nevow_clientToServerEvent('close', '', evalAfterDone)
  226.     auto_open = old_auto_open
  227. }
  228.  
  229.  
  230. var server = {
  231.     handle: function(handlerName) {
  232.         var args = [handlerName, '']
  233.         for (var i = 1; i < arguments.length; i++) {
  234.             args.push(arguments[i])
  235.         }
  236.         nevow_clientToServerEvent.apply(this, args)
  237.     }
  238. };
  239.  
  240. function nevow_startLivePage() {
  241.   if (nevow_clientHandleId == null) {
  242.     alert('UNSUPPORTED!  USE AT YOUR OWN RISK!');
  243.     var x = createRequest();
  244.     x.request.onreadstatechange = function () {
  245.       if (x.request.readyState == 4) {
  246.         nevow_clientHandleId = x.request.responseText;
  247.         nevow_startLivePage();
  248.       }
  249.     };
  250.     x.request.open("GET", base_url + "new");
  251.     x.request.send(null);
  252.   } else {
  253.     connect(0);
  254.   }
  255. }
  256.  
  257.  
  258. var nevow_origOnLoad = window.onload;
  259. function nevow_onLoad() {
  260.     if (nevow_origOnLoad) {
  261.       if(typeof(nevow_origOnLoad) == "string") {
  262.         eval(nevow_origOnLoad);
  263.       }
  264.       else {
  265.         nevow_origOnLoad();
  266.       }
  267.     }      
  268.     if (auto_open) {
  269.         nevow_startLivePage();
  270.     }
  271. }
  272. window.onload = nevow_onLoad;
  273.  
  274.